首先先安裝套件
pip install line-bot-sdk
廢話不多說,先上程式碼
import json
from flask import Flask, request
from linebot import LineBotApi, WebhookHandler
app = Flask(__name__)
@app.route("/", methods=['POST'])
def get_reply():
try:
api = LineBotApi('<你的Channel access token>') #本篇暫時不會用到,但後續會用到
handler = WebhookHandler('<你的channel secret>')
body = request.get_data(as_text=True)
json_data = json.loads(body)
signature = request.headers['X-Line-Signature']
handler.handle(body, signature)
user_id = json_data['events'][0]["source"]['userId']
text = json_data['events'][0]['message']['text']
print(user_id, text)
except Exception as e:
print(e)
return 'OK'
if __name__ == "__main__":
app.run()
回到ngrok Domain設定頁面並點擊藍色的按鈕
將你的domain網址複製下來
(以下運行環境由linux進行演示)
這邊設定成功後,在第二個終端機輸入
ngrok http --domain=<your-domain> 5000
結果如上,把紅色塗掉的網址複製下來,貼到LineBot機器人的Messaging API->Webhook settings->Webhook URL
底下的Use webhook記得要勾,不然不能使用
貼上設定後按Verify並出現Success代表成功
此時就可以把你的py檔跑起來啦
點擊網頁的"Verify"時終端機出現list index out of range是正常的,因為我們沒有傳訊息給機器人,沒有任何傳入的資料所以會報錯。
LineBotSdkDeprecatedIn30: Call to deprecated class WebhookHandler. (Use 'from linebot.v3.webhook import WebhookHandler' instead. See https://github.com/line/line-bot-sdk-python/blob/master/README.rst for more details.) -- Deprecated since version 3.0.0.
若出現了以上錯誤,請忽略,單純line-bot-sdk的套件包寫法有改而已。
請在程式碼一開始新增幾行程式碼如下,並在app.run()
的上面加上以下程式碼。
import warnings
from linebot import LineBotSdkDeprecatedIn30
'''
你的函式
'''
if __name__ == "__main__":
warnings.filterwarnings("ignore", category=LineBotSdkDeprecatedIn30)
app.run()
意思是讓python忽略類似的警示,再次執行警示就會消失了。
再次點擊你多頁訊息所設定的按鈕並發送的訊息時會看到終端機這邊出現你的userid與發送的訊息,這個方法適用於任何加入這個機器人的好友並且發送過訊息。
(不一定是要發送多頁訊息所設定的訊息,只要有發送訊息終端這邊都能接收userid)